Functional Core, Imperative Shell
Functional Core, Imperative Shell
アプリケーションを作るときのアーキテクチャの話
恐らくこの辺が出典
Boundaries
Functional Core, Imperative Shell
https://gyazo.com/811e11b42dba2b53a847cdcb44b78460
https://gyazo.com/19cce5bc51237bdab53626128bea9fbc
アプリケーション全体で見れば、
ドメインごとにFunctional Core, Imperative Shellがあって、
その集合としてアプリケーションが成り立っていると見た方がイメージしやすい
アプリケーションのコア部分を関数型っぽく書き、その側部分は命令的に書くみたいなことを言っている
関数型とか命令的とか言うのは、キャッチーな単語の選択に過ぎないと思うmrsekut.icon
「コア部分で関数型プログラミングをしろ」という主張ではない
重要なのは、コア部分は副作用のない型のかっちりした感じで実装し、
副作用部分はもっと外側で書く
個人的にはThree Haskell Cake辺りがわかりやすかった
Haskellのような言語で、このアーキテクチャを見ると、副作用がどこにあるのか明確にわかりやすい
実際、コア部分にはIOなどは一切登場しないように実装される
The Clean ArchitectureのようなLayered Architectureの多くはこれに則っていると思う
Functional Core
Imperative Shell
Functional core, imperative shell in Javascript | by Magnus Tovslid | Medium
コード例がイマイチな気がするが、説明はまとまってる
https://github.com/kbilsted/Functional-core-imperative-shell
リンク集
https://simpleprogrammer.com/there-are-only-two-roles-of-code/
https://stackoverflow.com/questions/61794525/use-type-classes-to-implement-dependency-inversion-in-a-haskell-application
関数型言語の依存関係逆転の原則 (DIP)